#include "CompilerPascalino.h"

CompilerPascalino::CompilerPascalino() {
}

CompilerPascalino::~CompilerPascalino() {
}

/*
 * Analise Lexico
 * @param: char* fileIn, char* fileOut
 * @return: bool
 */
bool CompilerPascalino::analiseLexico(char* fileIn, char* fileOut) {
	this->lexico.setArquivo(fileIn, fileOut);
	return (this->lexico.analiseLexico());
}

/*
 * Analise Sintatico
 * @return: bool
 */
bool CompilerPascalino::analiseSintatico() {
	this->sintatico.setTokenizerList(this->lexico.getTokensEncontrado());
	return (this->sintatico.doSyntaticAnalysis(&this->syntaticTree,
			&this->tabelaHash));
}

/*
 * Mostrar Arquivo Lexico
 */
void CompilerPascalino::showAnaliseLexico() {
	this->lexico.imprimirToken();
}

/*
 * Mostrar a tabela hash
 * @param: char* fileOut
 */
void CompilerPascalino::showHashTable(char* fileOut) {
	this->tabelaHash.showHashTable(fileOut);
}

/*
 * Mostrar o gerador de codigo
 * @param: char* fileOut
 */
void CompilerPascalino::showCodeGenerator(char* fileOut) {
	this->geradorCodigo.setFileOut(fileOut);
	this->geradorCodigo.generateCode(&this->tabelaHash, &this->syntaticTree);
	this->geradorCodigo.showCode();

}

/*
 * Mostrar a arvore sintatica
 * @param: char* fileOut
 */
void CompilerPascalino::showSyntaticTree(char* fileOut) {
	this->syntaticTree.showTree(fileOut, true);
}

/*
 * Analise semantica
 * @param: noTree* errorNode
 * @return: boolean
 */
bool CompilerPascalino::analiseSemantico(noTree* errorNode) {
	return (this->semantico.semanticAnalysis(&this->tabelaHash,
			&this->syntaticTree, errorNode));
}
